﻿//Funktion:        Hauptformular zum Verschlüsselungs-/Komprimierungsprogramm
//Sprache:         C# (Visual Studio 2008 Professional)
//Autor:           Dipl.-Ing. Andreas Maslo
//(c):             IngES/Dipl.-Ing. Andreas Maslo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CryptCompress
{
    public partial class frmCryptCompress : Form
    {
        //Objekt zur Verschlüsselung/Komprimierung
        dnpCryptCompress.CryptCompress CryptObj = new dnpCryptCompress.CryptCompress();

        //Dateiname für Komprimierung
        string MyFileName = "";
        //Kennwort für Komprimierung (optional)
        string MyPassword = "";
        //Zieldateiname wird automatisch generiert, so dass keine vorhandenen Dateien überschrieben werden

        public frmCryptCompress()
        {
            InitializeComponent();
            //Arbeitsverzeichnis vorgeben
            openDlg.InitialDirectory = Application.StartupPath; 
            //Beispiel für Testaufruf der zeichenkettenbasierten Methoden zur Verschlüsselung(/Entschlüsselung
            dnpCryptCompress.CryptCompress CryptObj = new dnpCryptCompress.CryptCompress();
            //  string txt = "Der zu verschlüsselnde Text... ÄÖÜßäöü...";
            //  string ctxt = CryptObj.Crypt(txt, "abc007");
            //  MessageBox.Show(ctxt, "Verschlüsselter Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //  string dtxt = CryptObj.DeCrypt(ctxt, "abc007");
            //  MessageBox.Show(dtxt, "Entschlüsselter Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnCompress_Click(object sender, EventArgs e)
        {
            //Datei komprimieren
            openDlg.FileName = "";
            openDlg.AddExtension = false;
            openDlg.CheckFileExists = true;
            openDlg.RestoreDirectory = false;
            openDlg.Filter = "Alle Dateien (*.*)|*.*";
            openDlg.FilterIndex = 1;
            //Datei wählen
            if (openDlg.ShowDialog() == DialogResult.OK) {
                MyFileName = openDlg.FileName; 
                //gewählte Datei komprimieren
                try
                {
                    //Kennwort übernehmen und komprimieren
                    MyPassword = GetPassword();
                    string msg = CryptObj.Compress(MyFileName, MyPassword);
                    MessageBox.Show(msg, "Datei komprimieren", MessageBoxButtons.OK, MessageBoxIcon.Information); 
                }
                catch (Exception ex)
                {
                    string msg = "Die Datei '" + MyFileName + "' konnte nicht komprimiert werden! " + ex;
                    MessageBox.Show(msg, "Datei komprimieren", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
                }
            }
        }

        private void btnDeCompress_Click(object sender, EventArgs e)
        {
            //Datei dekomprimieren
            openDlg.FileName = "";
            openDlg.AddExtension = false;
            openDlg.CheckFileExists = true;
            openDlg.RestoreDirectory = false;
            openDlg.Filter = "Komprimierte Dateien (*.dnpzip)|*.dnpzip";
            openDlg.FilterIndex = 1;
            //Datei wählen
            if (openDlg.ShowDialog() == DialogResult.OK)
            {
                MyFileName = openDlg.FileName;
                //gewählte Datei dekomprimieren
                try
                {
                    //Kennwort übernehmen und komprimieren
                    MyPassword = GetPassword();
                    string msg = CryptObj.DeCompress(MyFileName, MyPassword);
                    MessageBox.Show(msg, "Datei dekomprimieren", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    string msg = "Die Datei '" + MyFileName + "' konnte nicht dekomprimiert werden! " + ex;
                    MessageBox.Show(msg, "Datei dekomprimieren", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnCrypt_Click(object sender, EventArgs e)
        {
            //Datei verschlüsseln
            openDlg.FileName = "";
            openDlg.AddExtension = false;
            openDlg.CheckFileExists = true;
            openDlg.RestoreDirectory = false;
            openDlg.Filter = "Alle Dateien (*.*)|*.*";
            openDlg.FilterIndex = 1;
            //Datei wählen
            if (openDlg.ShowDialog() == DialogResult.OK)
            {
                MyFileName = openDlg.FileName;
                //gewählte Datei verschlüsseln
                try
                {
                    //Kennwort übernehmen und komprimieren
                    MyPassword = GetPassword();
                    string msg = CryptObj.FileCrypt(MyFileName, MyPassword);
                    MessageBox.Show(msg, "Datei verschlüsseln", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    string msg = "Die Datei '" + MyFileName + "' konnte nicht komprimiert werden! " + ex;
                    MessageBox.Show(msg, "Datei verschlüsseln", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnDeCrypt_Click(object sender, EventArgs e)
        {
            //Datei entschlüsseln
            openDlg.FileName = "";
            openDlg.AddExtension = false;
            openDlg.CheckFileExists = true;
            openDlg.RestoreDirectory = false;
            openDlg.Filter = "Verschlüsselte Dateien (*.dnpcrypt)|*.dnpcrypt";
            openDlg.FilterIndex = 1;
            //Datei wählen
            if (openDlg.ShowDialog() == DialogResult.OK)
            {
                MyFileName = openDlg.FileName;
                //gewählte Datei entschlüsseln
                try
                {
                    //Kennwort übernehmen und entschlüsseln
                    MyPassword = GetPassword();
                    string msg = CryptObj.FileDecrypt(MyFileName, MyPassword);
                    MessageBox.Show(msg, "Datei entschlüsseln", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    string msg = "Die Datei '" + MyFileName + "' konnte nicht dekomprimiert werden! " + ex;
                    MessageBox.Show(msg, "Datei dekomprimieren", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnEnd_Click(object sender, EventArgs e)
        {
            //Programm beenden
            string msg = "Wollen Sie das Programm beenden?";
            if (MessageBox.Show(msg, "Programm beenden", MessageBoxButtons.YesNo, 
             MessageBoxIcon.Question) == DialogResult.Yes) {
              this.Close();
            } 
        }

        private void btnDeletePassword_Click(object sender, EventArgs e)
        {
            //Kennwort zurücksetzen
            txtPassword.Text = "";
        }

        public string GetPassword()
        {
            //manuell eingegebenes Kennwort in Abhängigkeit vom gewählten Optionsfeld
            if (rbUseInternal.Checked == true) {
                return "";
            }
            else {
                return txtPassword.Text;
            }
        }

   }
}
